<?php

namespace app\admin\traits;

use app\common\model\Role;
use app\common\model\User;
use ShidianUtil\Utils\StringUtil;
use think\exception\ValidateException;

/**
 * 管理员&公司检查
 * Trait AdminCheckTrait
 * @package app\admin\traits
 */
trait AdminCheckTrait
{
    /**
     * 检查是否是管理员
     * @param User $user
     * @return void
     */
    private function checkAdmin(User $user, string $message = '您不是管理员，不能进行该操作'): void
    {
        if (StringUtil::equals($user->roleType, Role::ROLE_TYPE_ADMIN)) {
            return;
        }
        throw new ValidateException($message);
    }

    /**
     * 检查是否是公司
     * @param User $user
     * @return void
     */
    private function checkCompany(User $user, string $message = '您不是公司，不能进行该操作'): void
    {
        if (StringUtil::equals($user->roleType, Role::ROLE_TYPE_COMPANY)) {
            return;
        }
        throw new ValidateException($message);
    }

    /**
     * 校验，只能操作本公司数据
     * @param User $user
     * @param $companyId
     * @param string $message
     * @return void
     */
    private function checkAdminOrSelfCompany(User $user, $companyId, string $message = '您只能操作本公司数据'): void
    {
        if (StringUtil::equals($user->roleType, Role::ROLE_TYPE_ADMIN)) {
            return;
        }

        if (StringUtil::equals($user->roleType, Role::ROLE_TYPE_COMPANY) && StringUtil::equals($user->id, $companyId)) {
            return;
        }

        throw new ValidateException($message);
    }
}
